package com.teamin.service;

import com.alibaba.fastjson.JSONObject;
import com.teamin.entity.FileEntity;
import com.teamin.entity.FileTempEntity;
import org.apache.ibatis.annotations.Param;

import java.io.UnsupportedEncodingException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 文件服务
 * @author qfu
 * @Date 2.17/9/19 11:39
 */
public interface FileService {

	public static long IMGE_SIZE_LIMIT= 4194304 ; //4M 大小
	public static final int IMAGE_THUMB_H = 530;// 缩略图的大小
	//支持的缩略图
	public static Set<String> suportThumbnail = new HashSet<>() ;
	//文件属于任务
	public int FILE_STROAGE_TYPE_TASK = 1 ;
	//文件属于圈子
	public int FILE_STROAGE_TYPE_CIRCLE= 2 ;

	/**
	 * 查询临时文件
	 * @uuid UUID
	 * @return 插入的状态
	 */
	public FileTempEntity selectTempFile(String uuid) ;

	/**
	 * 查询临时文件
	 * @uuid UUID
	 * @return 插入的状态
	 */
	public int deleteTempFile(String uuid) ;

	/**
	 * 插入一个文件
	 * @file file
	 * @return 插入的状态
	 */
	public int insertFile(FileEntity file) ;

	/**
	 * 获取一个向圈子中上传文件的URL
	 * @param taskId  任务ID
	 * @fileName 文件名
	 * @return URL
	 */
	JSONObject getTaskPostUrl(Long userId, Long taskId, String fileName, Long fileSize);

	JSONObject postObject(String key, Long size) throws Exception;

    /**
	 * 获取文件大小
	 * @param key 文件路径
	 * @return
	 */
	public Long getFileSize(String key ) ;


	/**
	 * 检查是否支持此格式的缩略图
	 * @param format 指定的格式
	 * @return
	 */
	public boolean supportThumbnailFormat(String format) ;

	/**
	 * 获取文件在OSS上的缩略图的URL
	 * @param uuid
	 * @param fileName 文件名
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public String getFileUrl(String uuid,String fileName) ;

	/**
	 * 获取文件在OSS上的缩略图的URL
	 * @param uuid
	 * @param fileName 文件名
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public String getFileThumbnail(String uuid,String fileName)  ;

	void recoveryDeleteFile();

	/**
	 * 设置文件删除状态,设置后会在指定时间内自动清除OSS 上面的文件
	 */
	int deleteFile(Long fileId);

	/**
	 *  获取已被删除的文件删除文件
	 */
	List<FileEntity> selectDeletedFile() ;

	/**
	 * 设置文件删除状态,设置后会在指定时间内自动清除OSS 上面的文件
	 */
    int updateRecovery(String fileIds);

	/**
	 *  删除文件
	 */
	public int deleteFileByUUID(@Param("uuid") String uuid) ;


	/**
	 * 通过Id 获取文件
	 * @param id
	 * @return
	 */
	FileEntity getById(Integer id);

}
